package com.wlc.oop.innerclassdemo;

/**
 * @author 王立朝 wanglichao@champion-credit.com
 * @description 静态内部类
 * @date 2021-07-06 17:27
 */
public class Hero2 {

    public String name;
    protected int hp;
    private int age = 0;

    /**
     * 私有的静态的外部类的方法
     */
    private static void test(){
        System.out.println("私有的静态的外部方法");
        System.out.println("赢了");
    }
    private void test2(){
        System.out.println("私有非静态的外部方法");
    }
    public void test3(){
        System.out.println("私有非静态的外部方法");
    }

    // 定一个一个静态内部类
    //敌方的水晶
    static class EnemyCrystal{
        int hp;

        //如果水晶的血量为0，则宣布胜利
        public void checkIfVictory(){
            if(hp==0){
                Hero2.test();
                // 静态内部类不可以访问外部类的非静态的方法，除了可以访问 静态的私有的方法

                //Hero2.test2();
                //Hero2.test3();

                //静态内部类不能直接访问外部类的对象属性
                //System.out.println(name + " win this game");
            }
        }
    }

    public static void main(String[] args) {
        // 实例化静态的内部类，不需要实例化外部类，
        // 所以不可以直接访问外部类的属性和 非静态的非私有的方法； 除了私有的静态方法可以访问
        Hero2.EnemyCrystal enemyCrystal = new Hero2.EnemyCrystal();
        enemyCrystal.hp = 0;
        enemyCrystal.checkIfVictory();
    }
}
